class Polygon {
    constructor() {
        this.name = 'Polygon';
    }
}

const poly1 = new Polygon();

console.log(poly1.name);

// constructor 是 es6中每个类必须要有的 并且 是一种用于创建和初始化class创建的对象的特殊方法。

// super 使用spuer 才可以使子类的this指向父类，从而调用父类的内部函数
// 在普通方法中，指向父类的原型对象；在静态方法中，指向父类.。

class A {
    c() {
        return 2;
    }
}

class B extends A {
    constructor() {
        super();
        console.log(super.c()); // 2
    }
}

let b1 = new B();
// 上面代码中，子类 B 当中的 super.c()，就是将 super 当作一个对象使用。这时，super 在普通方法之中，指向 A.prototype，所以 super.c() 就相当于 A.prototype.c()。

// 通过 super 调用父类的方法时，super 会绑定子类的 this。

class A {
    constructor() {
        this.x = 1;
    }
    s() {
        console.log(this.x);
    }
}

class B extends A {
    constructor() {
        super();
        this.x = 2;
    }
    m() {
        super.s();
    }
}

let b = new B();
b.m(); // 2